package pl.edu.pk.psb.bc.util;

import java.util.Comparator;
import java.util.List;

import pl.edu.pk.psb.bc.ds.PolaczenieDs;
import pl.edu.pk.psb.bc.ds.PrzystanekDs;
import pl.edu.pk.psb.bc.ds.TrasaDs;

public class Wezel implements Comparable<Wezel> {

	private int gVal;
	private int fVal;
	private int hVal;
	private Wezel poprzedniWezel;
	private PrzystanekDs przystanek;
	private int odlegloscDoRodzica;
	private int cenaDoRodzica;
	private int czasDoRodzica;
	private List<PolaczenieDs> listaPolaczen;
	private boolean przesiadka;
	private TrasaDs trasa;

	public Wezel(int hVal, PrzystanekDs przystanek, List<PolaczenieDs> polaczenia) {
		super();
		this.hVal = hVal;
		this.przystanek = przystanek;
		this.listaPolaczen = polaczenia;
	}

	public int getgVal() {
		return gVal;
	}

	public void setgVal(int gVal) {
		this.gVal = gVal;
	}

	public int getfVal() {
		return fVal;
	}

	public void setfVal(int fVal) {
		this.fVal = fVal;
	}

	public int gethVal() {
		return hVal;
	}

	public void sethVal(int hVal) {
		this.hVal = hVal;
	}

	public Wezel getPoprzedniWezel() {
		return poprzedniWezel;
	}

	public void setPoprzedniWezel(Wezel poprzedniWezel) {
		this.poprzedniWezel = poprzedniWezel;
	}

	public PrzystanekDs getPrzystanek() {
		return przystanek;
	}

	public void setPrzystanek(PrzystanekDs przystanek) {
		this.przystanek = przystanek;
	}

	public int getOdlegloscDoRodzica() {
		return odlegloscDoRodzica;
	}

	public void setOdlegloscDoRodzica(int odlegloscDoRodzica) {
		this.odlegloscDoRodzica = odlegloscDoRodzica;
	}

	public void obliczGdlaOdleglosci(int aktualnyKoszt){
		gVal = aktualnyKoszt + odlegloscDoRodzica;
	}
	
	public void obliczGdlaCeny(int aktualnyKoszt){
		gVal = aktualnyKoszt + cenaDoRodzica;
	}
	

	public void obliczGdlaCzasu(int calkowityCzas) {
		gVal = calkowityCzas + czasDoRodzica;
		
	}
	
	public void obliczF() {
		fVal = gVal + hVal;
	}

	public boolean porownaj(PrzystanekDs p) {
		if (this.przystanek.getNazwa().equals(p.getNazwa()))
			return true;
		else
			return false;
	}
	
	public List<PolaczenieDs> getPolaczenia() {
		return listaPolaczen;
	}

	public void setPolaczenia(List<PolaczenieDs> polaczenie) {
		this.listaPolaczen = polaczenie;
	}

	public boolean isPrzesiadka() {
		return przesiadka;
	}

	public void setPrzesiadka(boolean przesiadka) {
		this.przesiadka = przesiadka;
	}
	
	public List<PolaczenieDs> getListaPolaczen() {
		return listaPolaczen;
	}

	public void setListaPolaczen(List<PolaczenieDs> listaPolaczen) {
		this.listaPolaczen = listaPolaczen;
	}

	public TrasaDs getTrasa() {
		return trasa;
	}

	public void setTrasa(TrasaDs trasa) {
		this.trasa = trasa;
	}
	
	public double getCenaDoRodzica() {
		return cenaDoRodzica;
	}

	public void setCenaDoRodzica(int cenaDoRodzica) {
		this.cenaDoRodzica = cenaDoRodzica;
	}

	public int getCzasDoRodzica() {
		return czasDoRodzica;
	}

	public void setCzasDoRodzica(int czasDoRodzica) {
		this.czasDoRodzica = czasDoRodzica;
	}

	@Override
	public int compareTo(Wezel o) {
		if (o.getfVal() > this.fVal)
			return -1;
		else if (o.getfVal() < this.fVal)
			return 1;
		else
			return 0;
	}

	@Override
	public boolean equals(Object obj) {
		return porownaj(((Wezel) obj).getPrzystanek());
	}
}
